package com.lilike.music.ss.service;

import com.lilike.music.common.MessageBean;
import com.lilike.music.common.OSSClientFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 实现文件上传功能
 *  思路：通过阿里云OSS对象存储，对指定的文件做上传操作，并将文件保存在阿里云OSS服务中
 *       这里使用OSS对象存储其中的断点续传上传
 *
 *       断点续传上传：可对当客服端网络不稳定或者程序崩溃时，当用户重新上传时，
 *                   可在断点处实现续传上传功能
 *
 * @author weijun
 */
@Component
public abstract class OSSFileUploadService implements FileUploadService{

    @Autowired
    private OSSClientFactory ossClientFactory;

    /** 指定上传并发线程数 **/
    protected static final Integer UPLOAD_TASK_NUMBER = 5;

    /** 指定上传的分片大小 **/
    protected static final Integer UPLOAD_PART_SIZE = 1024 * 1024;

    public abstract MessageBean upload(String filePath);

    /**
     * 获取Bucket指定Key名称
     *
     * @return
     */
    protected String getBucketName(){
        return ossClientFactory.getBucketName();
    }

    public OSSClientFactory getOssClientFactory() {
        return ossClientFactory;
    }
}
